package com.employment.entity;

import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 聊天消息实体类
 * 对应数据库表：chat_message
 * 
 * @author Employment System
 * @since 1.0.0
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Table("chat_message")
public class ChatMessage extends BaseEntity {

    private static final long serialVersionUID = 1L;

    /**
     * 消息ID
     */
    @Id(keyType = KeyType.Auto)
    private Long messageId;

    /**
     * 会话ID
     */
    private Long conversationId;

    /**
     * 发送者ID
     */
    private Long senderId;

    /**
     * 消息类型：1文字，2图片，3语音，4视频，5文件，6位置，7系统消息
     */
    private Integer messageType;

    /**
     * 消息内容
     */
    private String content;

    /**
     * 文件URL
     */
    private String fileUrl;

    /**
     * 文件名称
     */
    private String fileName;

    /**
     * 文件大小（字节）
     */
    private Long fileSize;

    /**
     * 语音/视频时长（秒）
     */
    private Integer duration;

    /**
     * 缩略图URL
     */
    private String thumbnail;

    /**
     * 位置纬度
     */
    private BigDecimal locationLatitude;

    /**
     * 位置经度
     */
    private BigDecimal locationLongitude;

    /**
     * 位置地址
     */
    private String locationAddress;

    /**
     * 回复的消息ID
     */
    private Long replyToMessageId;

    /**
     * 是否撤回：0否，1是
     */
    private Integer isRecall;

    /**
     * 撤回时间
     */
    private LocalDateTime recallTime;

    /**
     * 是否已读：0未读，1已读
     */
    private Integer isRead;

    /**
     * 已读人数
     */
    private Integer readCount;

    // ========== 兼容性方法 ==========
    
    /**
     * 获取位置信息（兼容方法）
     */
    public String getLocationInfo() {
        if (locationAddress != null) {
            return locationAddress;
        }
        if (locationLatitude != null && locationLongitude != null) {
            return locationLatitude + "," + locationLongitude;
        }
        return null;
    }
    
    /**
     * 获取是否撤回（兼容方法）
     */
    public Boolean getIsRecalled() {
        return isRecall != null && isRecall == 1;
    }
    
    /**
     * 获取创建时间（兼容方法）
     */
    public LocalDateTime getCreateTime() {
        return this.getCreatedAt();
    }
}